/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.usbcali.proyectofinal.logica;

import co.edu.usbcali.proyectofinal.dao.IUsuariosDAO;
import co.edu.usbcali.proyectofinal.modelo.Usuarios;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author alejandro
 */
@Scope("singleton")
@Service
public class UsuariosLogica implements IUsuariosLogica {

    @Autowired
    private IUsuariosDAO usuariosDAO;

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void crearUsuario(Usuarios usuarios) throws Exception {

        if (usuarios == null) {
            throw new Exception("El usuario es nulo");
        }
        if (usuarios.getTiposUsuarios() == null) {
            throw new Exception("El tipo usuario es nulo");
        }

        if (usuarios.getUsuCedula() <= 0) {
            throw new Exception("La cedula del usuario no es valida");
        }

        if (usuarios.getUsuClave() == null) {
            throw new Exception("La clave es obligatoria");
        }

        if (usuarios.getUsuLogin() == null) {
            throw new Exception("El usuario es obligatorio");
        }

        if (usuarios.getUsuNombre() == null) {
            throw new Exception("El nombre de usuario es obligatorio");
        }

        if (usuarios.getTiposUsuarios().getTusuCodigo() == 0) {
            throw new Exception("El usuario no es valido");
        }

        Usuarios entity = usuariosDAO.consultarUsuarioCedula(usuarios.getUsuCedula());

        if (entity != null) {
            throw new Exception("El usuario ya existe");
        }

        usuariosDAO.crearUsuario(usuarios);
    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void modificarUsuario(Usuarios usuarios) throws Exception {
        if (usuarios == null) {
            throw new Exception("El usuario es nulo");
        }
        if (usuarios.getTiposUsuarios() == null) {
            throw new Exception("El tipo usuario es nulo");
        }

        if (usuarios.getUsuCedula() <= 0) {
            throw new Exception("La cedula del usuario no es valida");
        }

        if (usuarios.getUsuClave() == null) {
            throw new Exception("La clave es obligatoria");
        }

        if (usuarios.getUsuLogin() == null) {
            throw new Exception("El usuario es obligatorio");
        }

        if (usuarios.getUsuNombre() == null) {
            throw new Exception("El nombre de usuario es obligatorio");
        }

        if (usuarios.getTiposUsuarios().getTusuCodigo() == 0) {
            throw new Exception("El usuario no es valido");
        }

        Usuarios entity = usuariosDAO.consultarUsuarioCedula(usuarios.getUsuCedula());

        if (entity != null) {
            throw new Exception("El usuario ya existe");
        }

        entity.setTiposUsuarios(usuarios.getTiposUsuarios());
        entity.setUsuClave(usuarios.getUsuClave());
        entity.setUsuLogin(usuarios.getUsuLogin());
        entity.setUsuNombre(usuarios.getUsuNombre());

        usuariosDAO.crearUsuario(entity);
    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void borrarUsuario(Usuarios usuarios) throws Exception {
        if (usuarios == null) {
            throw new Exception("El usuario es nulo");
        }

        if (usuarios.getUsuCedula() <= 0) {
            throw new Exception("La cedula del usuario no es valida");
        }

        Usuarios entity = usuariosDAO.consultarUsuarioCedula(usuarios.getUsuCedula());

        if (entity == null) {
            throw new Exception("El usuario no existe");
        }
        usuariosDAO.borrarUsuario(entity);
    }

    @Override
    @Transactional(readOnly = true)
    public Usuarios consultarUsuarioCedula(long usuCedula) throws Exception {
        return usuariosDAO.consultarUsuarioCedula(usuCedula);
    }

    @Override
    @Transactional(readOnly = true)
    public List<Usuarios> consultarTodosLosUsuarios() throws Exception {
        return usuariosDAO.consultarTodosLosUsuarios();
    }

}
